function [new_nodes, jaco_tran_inv,det_jaco] = real_and_ref(nodes)
% gauss_points = [0.1666666666667, 0.1666666666667;
%   0.6666666666667,0.1666666666667;
%    0.1666666666667,0.6666666666667];
gauss_points = [0.1012865073235, 0.1012865073253;
                0.7974269853531, 0.1012865073253;
                0.1012865073235, 0.7974269853531;
                0.4701420641051, 0.0597158717898;
                0.4701420641051, 0.4701420641051;
                0.0597158717898, 0.4701420641051;
                0.3333333333333, 0.3333333333333];
new_nodes = zeros(size(gauss_points));
Jacobi = [-nodes(1,1)+nodes(2,1), nodes(3,1) - nodes(1,1);
    -nodes(1,2)+nodes(2,2), nodes(3,2) - nodes(1,2)];
jaco_tran_inv = get_jaco_tran_inv(Jacobi);
det_jaco = abs(det(Jacobi));
for i = 1:size(gauss_points,1)
    xi = gauss_points(i,1);
    eta = gauss_points(i,2);
    
    % 计算形函数
    N1 = 1-xi-eta;
    N2 = xi;
    N3 = eta;
    
    % 计算实际坐标 (x,y)
    x = N1*nodes(1,1) + N2*nodes(2,1) + N3*nodes(3,1);
    y = N1*nodes(1,2) + N2*nodes(2,2) + N3*nodes(3,2);
    new_nodes(i,:) = [x, y];
end
end

function jaco_tran_inv = get_jaco_tran_inv(Jacobi)
jaco_tran_inv = zeros(size(Jacobi));
jaco_tran_inv(1,1) = Jacobi(2,2);
jaco_tran_inv(1,2) = -Jacobi(1,2);
jaco_tran_inv(2,1) = -Jacobi(2,1);
jaco_tran_inv(2,2) = Jacobi(1,1);
jaco_tran_inv = (1/det(Jacobi))*jaco_tran_inv;
jaco_tran_inv = jaco_tran_inv';
end